package com.furb.pub.controle.sistema;

import java.util.HashSet;

import com.furb.pub.controle.produto.Adicional;
import com.furb.pub.controle.produto.ProdutoBase;
import com.furb.pub.persistencia.AdicionalDao;
import com.furb.pub.persistencia.ClienteDao;
import com.furb.pub.persistencia.CozinheiroDao;
import com.furb.pub.persistencia.EstabelecimentoDao;
import com.furb.pub.persistencia.FactoryDao;
import com.furb.pub.persistencia.GarcomDao;
import com.furb.pub.persistencia.IDao;
import com.furb.pub.persistencia.MesaDao;
import com.furb.pub.persistencia.ProdutoBaseDao;
import com.furb.pub.persistencia.SetorDao;

public class Sistema {

    private static final Sistema SISTEMA = new Sistema();

    private HashSet<Setor> setores = new HashSet<Setor>();
    private HashSet<Pessoa> garcons = new HashSet<Pessoa>();
    private HashSet<Pessoa> cozinheiros = new HashSet<Pessoa>();
    private HashSet<Mesa> mesas = new HashSet<Mesa>();
    private HashSet<Cliente> clientes = new HashSet<Cliente>();
    private HashSet<ProdutoBase> produtos = new HashSet<ProdutoBase>();
    private HashSet<Estabelecimento> estabelecimentos = new HashSet<Estabelecimento>();
    private HashSet<Adicional> adicionais = new HashSet<Adicional>();

    private Sistema() {
    }

    public static Sistema getInstance() {
        return SISTEMA;
    }

    {
        IDao<Setor> setorDao = FactoryDao.getInstance(SetorDao.class.getName());
        IDao<Garcom> garcomDao = FactoryDao.getInstance(GarcomDao.class.getName());
        IDao<Cozinheiro> cozDao = FactoryDao.getInstance(CozinheiroDao.class.getName());
        IDao<Mesa> mesaDao = FactoryDao.getInstance(MesaDao.class.getName());
        IDao<Cliente> cliDao = FactoryDao.getInstance(ClienteDao.class.getName());
        IDao<ProdutoBase> produtoDao = FactoryDao.getInstance(ProdutoBaseDao.class.getName());
        IDao<Estabelecimento> estDao = FactoryDao.getInstance(EstabelecimentoDao.class.getName());
        IDao<Adicional> adcDao = FactoryDao.getInstance(AdicionalDao.class.getName());

        produtos.addAll(produtoDao.listar());
        clientes.addAll(cliDao.listar());
        setores.addAll(setorDao.listar());
        mesas.addAll(mesaDao.listar());
        garcons.addAll(garcomDao.listar());
        cozinheiros.addAll(cozDao.listar());
        estabelecimentos.addAll(estDao.listar());
        adicionais.addAll(adcDao.listar());
    }

    /**
     * @return the setores
     */
    public HashSet<Setor> getSetores() {
        return setores;
    }

    /**
     * @return the garcons
     */
    public HashSet<Pessoa> getGarcons() {
        return garcons;
    }

    /**
     * @return the cozinheiros
     */
    public HashSet<Pessoa> getCozinheiros() {
        return cozinheiros;
    }

    /**
     * @return the mesas
     */
    public HashSet<Mesa> getMesas() {
        return mesas;
    }

    /**
     * @return the clientes
     */
    public HashSet<Cliente> getClientes() {
        return clientes;
    }

    /**
     * @return the produtos
     */
    public HashSet<ProdutoBase> getProdutos() {
        return produtos;
    }

    public HashSet<Adicional> getAdicionais() {
        return adicionais;
    }

    /**
     * @return the estabelecimentos
     */
    public HashSet<Estabelecimento> getEstabelecimentos() {
        return estabelecimentos;
    }

    public static void main(String[] args) {
        Sistema.getInstance();
    }

}
